/*
 * Clase que realizará las conecciones a la base de datos.
 */
package persistence;

import java.sql.*;
import java.util.Hashtable;

/**
 * @author Eddwin Xico
 * @version 1.0
 */
public class PersistenceMySQLConnection {
    private String message;
    private String user;
    private String password;
    private String db;
    private String host;
    private String url;
    public  Connection connection = null;
    private Statement statement;
    private ResultSet resultSet;
    
    
    //--------------------------------------------------------------------------
    // Constructores
    //--------------------------------------------------------------------------

    /**
     * Constructor que inicializa llas instrucciones de url para la coneccion
     * a la Base de datos MySQL
     */
    public PersistenceMySQLConnection() {
        url = "jdbc:mysql://" + host+"/" + db;
    }

    /**
     * Constructor que inicializa los datos necesarios para la coneccion a la 
     * base de datos de MySQL.
     * @param serverX : servidor de hosting.
     * @param userX : usuario para la administracion de la base de datos.
     * @param passwordX : contrasena para acceder a la ase de datos.
     * @param dbX : el nombre de la base de datos.
     */
    public PersistenceMySQLConnection(String serverX, String userX, String passwordX, String dbX) {
        user = userX;
        password = passwordX;
        db = dbX;
        host = serverX;
        url = "jdbc:mysql://" + host + "/" + db;
    }

    
    //--------------------------------------------------------------------------
    // Metodos
    //--------------------------------------------------------------------------
    
    /**
     * Metodo que realiza la coneccion a la base de datos.
     */
    public void connect() {
        try {
            Class.forName("org.gjt.mm.mysql.Driver");
            connection = DriverManager.getConnection(url, user, password);
            if (connection != null) {
                message  = "Conexión a base de datos " + url + " correcta";
                statement = connection.createStatement();
            }
        }
        catch(SQLException ex) {
            message = "No se pudo conectar con la base de datos " + url;
        }
        catch(ClassNotFoundException ex) {
            message = ""+ ex;
        }
    }

    /**
     * Metodo para obtener el nombre de la base de datos.
     * @return 
     */
    public String getDb() {
        return db;
    }

    /**
     * Metodo para modificar el nombre de la base de datos.
     * @param dbX : el nombre de la nueva base de datos.
     */
    public void setDb(String dbX) {
        db = dbX;
    }

    /**
     * Metodo para obtener el host.
     * @return 
     */
    public String getHost() {
        return host;
    }

    /**
     * Metodo para modificar el Host.
     * @param hostX : nuevo host de la base de datos.
     */
    public void setHost(String hostX) {
        host = hostX;
    }

    /**
     * Metodo para obtener la contrasena de acceso a la base de datos
     * @return 
     */
    public String getPassword() {
        return password;
    }

    /**
     * Metodo para modificar la contrasena de acceso a la base de datos
     * @param passwordX : la nueva contrasena.
     */
    public void setPassword(String passwordX) {
    password = passwordX;
    }

    /**
     * Metodo para obtener el nombre de usuario para la administracion de la base 
     * de datos
     * @return 
     */
    public String getUser() {
        return user;
    }

    /**
     * Metodo para modificar el nombre de usuario de la base de datos.
     * @param userX 
     */
    public void setUser(String userX) {
        user = userX;
    }

   /**
     * Metodo para obtener el ultimo mensage generado por la base d datos.
     * @return 
     */
    public String getMessage(){
        return message;
    }

    /**
     * Metodo para eliminar un dato.
     * @param tabla : nombre de la tabla
     * @param nombre : nombre del dato.
     */
    public void delete(String tableX, String nameX) {
        try {
            statement.execute("DELETE FROM " + tableX +  "WHERE nombre=’" + nameX + "‘");
        }
        catch (SQLException ex) {
            message = ex.toString();
        }
    }
    
        /**
     * Permite crear una nueva base de datos en MySQL, la cual será correspondiente
     * al usuario cuyo nombre se recibe como parámetro.
     * @param usuario Nombre del usuario cuya base de datos será creada.
     */
    public void createDB(String nameX){
        try{
            Statement instruccionesBD = connection.createStatement();
            instruccionesBD.execute("CREATE DATABASE IF NOT EXISTS " + nameX);
            instruccionesBD.execute("USE " + nameX);
        }catch(Exception sqle){
            System.out.println("Error inesperado en el método crearBD, CoenexionBD. Contacte al proveedor del programa");
        }
    }
    
        /**
     * Permite utilizar la base de datos correspondiente al usuario ingresado 
     * como parámetro.
     * @param usuario Nombre del usuario que se encuentra utilizando el programa.
     * @return boolean True si se logro utilizar la base de datos requerida. False en caso contrario.
     */
    public boolean usarBD(String bdX){
        try{
            Statement instruccionesBD = connection.createStatement();
            instruccionesBD.execute("USE " + bdX);
            return true;
        }catch(Exception sqle){
          return false;
        }
    }
}